package com.samphanie.auiu.auth.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.samphanie.auiu.mbg.model.User;

import java.util.Optional;

/**
 * @author Dries
 * @email 1451691457@qq.com
 */
public interface IUserService extends IService<User> {

    /**
     * 判断用户是否存在
     */
    boolean isUsernameExisted(String username);

    boolean isEmailExisted(String email);

    boolean isMobileExisted(String mobile);

    User register(User user);

    /**
     * 根据用户名查找用户
     *
     * @param username 用户
     * @return 可能为空的用户
     */
    Optional<User> findOptionalByUsername(String username);

    /**
     * 根据用户手机号查找用户
     *
     * @param mobile 用户手机号
     * @return 可能为空的用户
     */
    Optional<User> findOptionalByMobile(String mobile);

    /**
     * 根据用户邮箱查找用户
     *
     * @param email 用户邮箱
     * @return 可能为空的用户
     */
    Optional<User> findOptionalByEmail(String email);

    User saveUser(User user);

    Optional<User> findOptionalByUsernameAndPassword(String username, String password);

    void validateUserUniqueFields(String username, String email, String mobile);

    Optional<String> createTotp(User user);

}
